﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OWLServer.owl.tipos;

namespace OWLServer.owl.interfaces
{
    /// <summary>
    /// Interfaz que define el gestor de ontologías.
    /// </summary>
    interface IfzGestorOntologias
    {
        /// <summary>
        /// Obtiene una ontologia de un elemento OWL
        /// </summary>
        /// <param name="ruta"></param>
        /// <returns></returns>
        Ontologia conversorOWLToOntologia(string ruta);

        /// <summary>
        /// Alamacena una ontologia en el sistema
        /// </summary>
        /// <param name="ontologia">Ontología a almacena</param>
        /// <param name="reemplazar">En el caso de existir una ya, nos dice si la reemplazamos o no</param>
        void almacenarOntologia(Ontologia ontologia, bool reemplazar);

        /// <summary>
        /// Elimina todas la ontologias del sistema
        /// </summary>
        void limpiarOntologiasSistema();

        /// <summary>
        /// Devuelve el listado de ontologías almacenadas en el sistema.
        /// </summary>
        /// <param name="completa">Indica si se completan los objetos de las obtologias</param>
        /// <returns>Listado de ontologías</returns>
        IList<Ontologia> listadoOntologias(bool completa);

        /// <summary>
        /// Agrega individuos a una ontologia
        /// </summary>
        /// <param name="ruta">Ruta donde está el OWL con los individuo</param>
        /// <param name="ontologia">Ontología a la que vamos a agregar los individuos</param>
        /// <returns></returns>
        Ontologia agregarIndividuosOWLToOntologia(string ruta, Ontologia ontologia);

        // <summary>
        /// Actualiza una ontologia en el sistema
        /// </summary>
        /// <param name="ontologia">Ontología a actualizar</param>
        void actualizarOntologia(Ontologia ontologia);

        /// <summary>
        /// Recupera una ontologia completa de la base de datos
        /// </summary>
        /// <param name="ontologia">Ontología a recuperar</param>
        /// <returns>Si existe nos la devuelve</returns>
        Ontologia recuperarOntologiaCompleta(Ontologia ontologia);

        /// <summary>
        /// Nos dice si existe la ontología en el sistema o no
        /// </summary>
        /// <param name="ruta">Ruta del OWL que representa la ontologia</param>
        /// <returns>Si existe o no existe</returns>
        bool existeOntologia(string ruta);

        /// <summary>
        /// Obtiene una ontología a partir de si Identificador
        /// </summary>
        /// <param name="espacioNombrePrincipal">Identificador de espacio Nombre Principal de la ontología</param>
        /// <param name="completa">Indica si se recuperán todos los datos de la ontología de la base de datos.</param>
        /// <returns>Ontología recuperada</returns>
        Ontologia getOntologiaEspacioNombrePrincipal(string espacioNombrePrincipal, bool completa);
    }
}
